package xian.woniu.service;

import org.apache.ibatis.annotations.Param;
import xian.woniu.entity.Appointment;
import xian.woniu.entity.Department;
import xian.woniu.entity.Doctor;
import xian.woniu.entity.Orders;
import xian.woniu.entity.Patient;

import java.util.List;
import java.util.Map;

/**
 * @author SongHang
 * @time 2022/06/29 16:00:50
 */
public interface IPatientService {
    /**
     * 查找所有用户
     * @return
     */
    List<Patient> findAll();

    /**
     * 查询一个病人
     * @param pid
     * @return
     */
    Patient findOne(Integer pid);

    /**
     * 查询患者的签约记录
     * @param pid
     * @return
     */
    List selSignRecord(Integer pid,Integer pageNow, Integer pageSize);

    /**
     * 查询患者的个人信息返回是一个数组，个人用
     * @param pid
     * @return
     */
    List selPatinfoReturnList(Integer pid);

    /**
     * 查询患者的个人信息返回是一个对象,公用
     * @param pid
     * @return
     */
    Patient selPatinfo(Integer pid);
    /**
     * 修改患者的个人信息
     * @param patient
     * @return
     */
    void updatePatinfo(Patient patient);

    /**
     * 新增患者的个人信息
     * @param patient
     * @return
     */
    void addPatinfo (Patient patient);

    /**
     * 通过主键pid删除患者的个人信息
     * @param pid
     * @return
     */
    void delPatinfo(String pid);

    List<Patient> getAllPatientInfo();

    /**
     * 传入一个市的一个区，查询出这个区的所有医院
     */
    List selLocalDistrictHospital(String districtHospital);

    /**
     * 查询当前医院可签约的医生团队
     */
    List selSignTeam(String dhospital);

    /**
     * 查询当前医院可签约的医生团队的套餐
     */
    List selSignPackage(String depname);

    /**
     * 根据套餐名称查询出套餐的id
     */
    Department selectByDepname(String depname);

    /**
     * 根据患者pid查询出所有和患者签约的医生信息
     */
    List selSignDocByPid(Integer pid);

    /**
     * 查询出所有可签约医生的信息
     */
    List selSignDoc(Integer depid, String dhospital);

    /**
     * 添加一条患者的签约记录
     */
    Integer addSignRecord(Orders orders);

    /**
     * 给患者续约套餐
     */
    Integer continueSign(Orders orders);

    /**
     * 查询患者有没有同类型的订单
     */
    List selSameSign(Integer otid,Integer pid);

    /**
     * 查询出患者的可预约服务时间
     */
    List selAppointmentTime();

    /**
     * 查询患者是否在该天已经预约该医生
     */
    Appointment selAppointmentRecord(@Param("pid") Integer pid, @Param("did")Integer did, @Param("atime")String atime);

    /**
     * 患者预约服务
     */
    Void goAppointment(Appointment appointment);

    /**
     * 查询患者的预约记录
     */
    List selAppointmentServiceRecord(Integer pid,Integer pageNow, Integer pageSize);

    /**
     * 查询患者预约表的各种状态
     */
    List selAppointmentAstate();

    /**
     * 根据患者pid和预约状态查询出所有的预约记录
     */
    List selAppointmentByAstate(Integer pid,String astate,Integer pageNow, Integer pageSize);

    /**
     * 查询出患者取消的这个服务是否已完成
     */
    Appointment selAppoinmentAstate(Integer pid, Integer did, String atime);


    //通过uid查个人信息
    Patient selPatientByUid(Integer uid);

    Map<String,Integer> getNumByAge();

}
